package cn.biplam.common.interfaces;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.ArrayList;

import cn.biplam.common.client.DataFilter;
import cn.biplam.common.client.DbResource;
import cn.biplam.common.client.OperatorResult;
import cn.biplam.common.paramters.PersisParam.Cache_Type;
import cn.biplam.common.wrapper.ErrorMessage;


/**
 * 数据持久化服务接口
 * @author WangSong 2009-6-2下午04:18:46
 * @version 1.0
 */
public interface OperatorServer extends Remote,RmiServer{
		
	/**
	 * 取持久化对象
	 * @param userId 用户id
	 * @param cid  容器id
	 * @param filter 过滤器
	 * @return  OperatorResult
	 * @throws RemoteException
	 */
	public OperatorResult get(String opId,String userId,DataFilter filter) 
	                            throws RemoteException,ErrorMessage;
	
	/**
	 * 取持久化对象
	 * @param userId 用户id
	 * @param cid  容器id
	 * @param filter 过滤器
	 * @param mDbResource 数据源信息
	 * @return  OperatorResult
	 * @throws RemoteException
	 */
	public OperatorResult get(String opId,String userId,DataFilter filter,DbResource mDbResource) 
	                            throws RemoteException,ErrorMessage;
	
	/**
	 * 取持久化对象
	 * @param userId 用户id
	 * @param cid  容器id
	 * @param filter 过滤器
	 * @param mDbResource 数据源信息
	 * @param sqls sql语句
	 * @return OperatorResult
	 * @throws RemoteException
	 */
	public OperatorResult get(String opId,String userId,DataFilter filter,DbResource mDbResource,ArrayList<String> sqls) 
	                            throws RemoteException,ErrorMessage;
	
	/**
	 * 取持久化对象
	 * @param userId 用户id
	 * @param cid  容器id
	 * @param filter 过滤器
	 * @param mDbResource 数据源信息
	 * @param ifgetsql true:返回sql，不执行 false 执行不返回sql
	 * @return OperatorResult
	 * @throws RemoteException
	 */
	public OperatorResult get(String opId,String userId,DataFilter filter,DbResource mDbResource,boolean ifgetsql) 
	                            throws RemoteException,ErrorMessage;
	
	/**
	 * 取持久化对象
	 * @param userId 用户id
	 * @param cid  容器id
	 * @param filter 过滤器
	 * @param mDbResource 数据源信息
	 * @param pageId 
	 * @param cacheType 是否刷新持久层（从数据库取数据，刷新持久层） refresh:刷新 lazy:不刷新
	 * @return Object
	 * @throws RemoteException
	 */
	public OperatorResult get(String opId,String userId,DataFilter filter,DbResource mDbResource,String pageId,Cache_Type cacheType) 
	                            throws RemoteException,ErrorMessage;
	
	/**
	 * 取下一页信息
	 * @param opId      持久化id
	 * @param userId    用户id
	 * @param filter    过滤器
	 * @param pageNum   页码
	 * @return
	 */
	public OperatorResult getPage(String opId, 
									  String userId,
									  DataFilter filter) throws RemoteException,ErrorMessage;
	/**
	 * 取下一页信息
	 * @param opId      持久化id
	 * @param userId    用户id
	 * @param filter    过滤器
	 * @param pageNum   页码
	 * @param showPageLine 每页显示条数
	 * @return
	 * @throws ErrorMessage 
	 * @throws RemoteException 
	 */
	public OperatorResult getPage(String opId, 
									  String userId,
									  DataFilter filter,
									  int showPageLine) throws RemoteException, ErrorMessage;
	/**
	 * 设置持久化对象
	 * @param userId 用户id
	 * @param pageId 页面id
	 * @param optId  操作id
	 * @param object 持久化对象
	 * @throws ErrorMessage 
	 */
	public void set(String userId,String pageId,String optId,Object object) throws RemoteException,ErrorMessage;
    
	/**
	 * 设置持久化对象
	 * @param userId 用户id
	 * @param pageId 页面id
	 * @param optId  操作id
	 * @param persisId 持久化id
	 * @param object 持久化对象
	 * @throws ErrorMessage 
	 */
	public void set(String userId,String pageId,String optId,String persisId,Object object) throws RemoteException,ErrorMessage;

}
